# -*- coding: utf-8 -*-
"""
Created on Mon Aug 14 23:20:23 2023

@author: skunk69
"""

import json

chinese_name = u'青少年学生疏离感量表'
english_name = "Adolescent Students' Alienation Scale"
abbreviation = 'ASAS'
category = u'家庭与人际关系量表'

outline = u"""《青少年学生疏离感量表》（Adolescent Student Alienation Scale，ASAS）是一种评估青少年学生在心理和社会生活方面疏离感的心理测评工具。疏离感是指个体在心理、情感和社会关系方面与他人、社会和自然环境的疏离状态。这种状态可能对青少年的心理健康、人际关系和学业产生负面影响。ASAS量表主要针对青少年学生，通过一系列题目来评估他们在不同维度上的疏离感表现。"""

instruction = u"""下列语句是人们的一些体验，对每项描述，看是否符合您的真实感受，选择你内心倾向的那个选项。"""

with open('ASAS.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for line in lines[0::2]:
    key,value = line.strip().split('、',maxsplit=1)
    items[key] = value.strip()

reverse_items = [12,13,14,17,18,20,22,25,33,34]
scales = [
    u'无意义感',
    u'自我疏离感',
    u'孤独感',
    u'自然疏离感',
    u'家人疏离感',
    u'生活环境疏离感',
    u'社会孤立感',
    u'压迫拘束感',
    u'不可控制感',
    ]
scales_items = [
    [6,11,16,40,43,50],# 无意义感
    [7,14,20,25,34,41],# 自我疏离感
    [1,15,18,24,28,33,36],# 孤独感
    [3,9,23,39],# 自然疏离感
    [22,48,51,52],# 家人疏离感
    [42,46,49],# 生活环境疏离感
    [2,19,27,30,35,44],# 社会孤立感
    [21,29,31,32,37,38],# 压迫拘束感
    [4,5,10,26],# 不可控制感
    ]
lie_detect_items = [[8,45],[12,47],[13,17]]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,53)}
print(f'complementary set= {check_set}')

check = []
for l in lie_detect_items:
    check = check+l
print(f'final check: {check_set^{l for l in check}}')    

factors = [u'社会疏离感',u'人际疏离感',u'环境疏离感']
factors_scales = [
    scales[0:2]+scales[6:8],
    [scales[2],scales[4],scales[-1]],
    [scales[3],scales[5]]
    ]
rating = [u'完全符合',u'比较符合',u'有点符合',u'不确定',
          u'有点不符合',u'比较不符合',u'完全不符合']
score_rules = list(range(7,0,-1))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'lie_detect_items':lie_detect_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《青少年学生疏离感量表》是一个自评量表，可以团体施测。"""

reliability = u"""该量表用三对测谎题来鉴别学生是否按自己正确的意愿作答，并以被试者是否有两对以上的测谎题的作答不一致（分数之间相差3分）作为剔除废卷的标准。量表的内部一致性系数、重测信度系数、分半信度系数都比较高，说明该量表具有较高信度。"""
validity = u"""该量表的项目来源于文献综述和开放式问卷调查整理后的结果，并对师生进行了个别访谈，征求了部分专家的意见，从而保证了量表的项目能够反映当前青少年学生疏离感的真实情况。并且，在量表形成过程中，做了小样本施测，并请教师、专家对量表的项目进行多次审查修改，保证了量表具有较高的内容效度。
抽取部分学生作为被试者，用国外疏离感量表和UCLA孤独量表（第三版，1988）作为效标，计算出它们之间的相关系数，以考察《青少年学生疏离感量表》的聚敛效度和区分效度。结果表明，量表之间的相关都是中等以上的，并且相关系数都达到显著水平。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""表的项目能够反映当前青少年学生疏离感的真实情况。并且，在量表形成过程中，做了小样本施测，并请教师、专家对量表的项目进行多次审查修改，保证了量表具有较高的内容效度。
抽取部分学生作为被试者，用国外疏离感量表和UCLA孤独量表（第三版，1988）作为效标，计算出它们之间的相关系数，以考察《青少年学生疏离感量表》的聚敛效度和区分效度。结果表明，量表之间的相关都是中等以上的，并且相关系数都达到显著水平。

结果分析方法
《青少年学生疏离感量表》包含九个维度：无意义感（Sense of Meaninglessness），自我疏离感（Self-Alienation），孤独感（Loneliness），自然疏离感（Nature Alienation），家人疏离感（Family Alienation），生活环境疏离感（Living Environment Alienation），社会孤立感（Social Isolation），压迫拘束感（Feeling of Broken Restraint），不可控制感（Sense of Uncontrollability）。这九个维度又分别聚合成三个因子，社会疏离感、人际疏离感和环境疏离感。其中，社会疏离感由无意义感、自我疏离感、社会孤立感和压迫拘束感四个维度组成，人际疏离感由孤独感、家人疏离感和不可控制感三个维度组成，环境疏离感由自然疏离感和生活环境疏离感组成。
在统计计分时，首先将反向条目反向计分，然后将各维度题目相加得到各维度分，相应维度聚合成因子分，所有52个条目得分之和即为该量表的总分。总分反映了被试者自我感觉到的总体疏离感程度。
将疏离感总分除以52则得到总平均分，如果平均分小于4分，说明被试者总体疏离感不明显，如果平均分高于4分，就表示被试者有一定程度的疏离感，分数越高，疏离感程度越高。
该量表设置了三对测谎题，条目8和条目45，条目12和条目47，条目13和条目17。如果被试者在同一对测谎题中的回答相反，则表明被试者可能没有按照实际情况如实回答，或者是不认真作答。"""

applications = u"""该量表可以用来测查青少年的疏离感，也可以用来进行相关研究。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)